package leetcode.newVersion.twoPointers;

public class lc11 {
    /*
    解题思路
双指针法：使用两个指针，一个指向数组的起始位置（left），另一个指向数组的末尾位置（right）。
计算面积：计算当前两个指针所指向的线段与x轴构成的容器的面积，面积由较短的那条线的高度和两个指针之间的距离决定。
移动指针：为了寻找可能更大的面积，移动较短的那条线的指针向内侧移动一位，因为移动较长的线的指针不会增加容器的高度，而移动较短的线的指针有可能找到更高的线，从而增加面积。
更新最大面积：在每次移动指针后，计算新的面积，并更新最大面积。
重复步骤：重复上述过程，直到两个指针相遇。
     */
    public int maxArea(int[] height) {
        int left = 0;
        int right = height.length-1;
        int area = 0;

        while (left < right) {
            int hLeft = height[left];
            int hRight = height[right];
            int w = right - left;
            //int h = Math.min(hLeft, hRight);//以短边为高
            if (hLeft > hRight) {//此时右边低，应该将右侧指针向左边移动
                int h = hRight;
                int tmpArea = h*w;
                area = Math.max(area, tmpArea);
                right--;
            }else {//此时左边边低，或者两边高度相等，应该将左侧指针向右边移动
                int h = hLeft;
                int tmpArea = h*w;
                area = Math.max(area, tmpArea);
                left++;
            }
        }
        return area;
    }

    public static void main(String[] args) {
        lc11 sol = new lc11();
        int[] height1 = new int[]{1,8,6,2,5,4,8,3,7};
        System.out.println(sol.maxArea(height1));
        int[] height2 = new int[]{1,1};
        System.out.println(sol.maxArea(height2));
    }
}
